home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / misc / xref_v1.1.lha / XRef / Tools / source / xrefattrs.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-01-09  |  5.5 KB  |  225 lines

  1. ;/* execute me to make with SAS 6.x
  2. sc NOSTKCHK CSRC xrefattrs.c OPT IGNORE=73
  3. slink lib:c.o xrefattrs.o //Goodies/extrdargs/extrdargs.o TO /c/xrefattrs SMALLDATA SMALLCODE NOICONS LIB lib:amiga.lib lib:sc.lib /lib/xrefsupport.lib
  4. quit
  5. */
  6.  
  7. /*
  8. ** $PROJECT: XRef-Tools
  9. **
  10. ** $VER: xrefattrs.c 0.1 (16.07.94)
  11. **
  12. ** by
  13. **
  14. ** Stefan Ruppert , Windthorststraße 5 , 65439 Flörsheim , GERMANY
  15. **
  16. ** (C) Copyright 1994
  17. ** All Rights Reserved !
  18. **
  19. ** $HISTORY:
  20. **
  21. ** 16.07.94 : 000.001 : initial
  22. */
  23.  
  24. #include "Def.h"
  25.  
  26. #include <libraries/xref.h>
  27. #include <proto/xref.h>
  28.  
  29. #include <debug.h>
  30.  
  31. #include "/lib/xrefsupport.h"
  32.  
  33. #include "xrefattrs_rev.h"
  34.  
  35. /* ---------------------------- version string ---------------------------- */
  36.  
  37. static char *version = VERSTAG;
  38. static char *prgname = "XRefAttrs";
  39.  
  40. /* ------------------------------- AutoDoc -------------------------------- */
  41.  
  42. /*FS*/ /*"AutoDoc"*/
  43. /*GB*** XRef-Tools/XRefAttrs *************************************************
  44.  
  45. $VER: XRefAttrs.doc
  46.  
  47. NAME
  48.     XRefAttrs - change attributes of a/some xreffile(s)
  49.  
  50. TEMPLATE
  51.     FILES/M/A,PRI/N/K,LOCK/S,UNLOCK/S,INDEX/S,NOINDEX/S
  52.  
  53. FORMAT
  54.     XRefAttrs [FILES] file [file1 [..]] [PRI priority] [LOCK|UNLOCK]
  55.               [INDEX|NOINDEX]
  56.  
  57. FUNCTION
  58.     changes a/some attribute(s) of a/some xreffile(s).
  59.  
  60. INPUTS
  61.     FILES (STRINGS) - filenames of the xreffiles to change the attributes
  62.  
  63.     PRI (NUMBER) - new priority for the xreffile(s)
  64.  
  65.     LOCK (BOOLEAN) - lock these xreffile(s)
  66.  
  67.     UNLOCK (BOOLEAN) - unlock the xreffile(s)
  68.  
  69.     INDEX (BOOLEAN) - generate an index for these xreffile(s). The normal
  70.         compare modes are much faster as without an index !!!
  71.  
  72.     NOINDEX (BOOLEAN) - removes all index array's of the xreffile(s)
  73.  
  74. EXAMPLE
  75.     XRefAttrs autodoc_v40.xref PRI -1 LOCK INDEX
  76.  
  77. SEE ALSO
  78.     LoadXRef, ExpungeXRef, ParseXRef, AGuideXRefV37, AGuideXRefV39,
  79.     XRefConvert
  80.  
  81. COPYRIGHT
  82.     by Stefan Ruppert (C) 1994
  83.  
  84. HISTORY
  85.     XRefAttrs 1.1 (16.7.94) :
  86.         - created
  87.  
  88. *****************************************************************************/
  89. /*FE*/
  90.  
  91. /* ------------------------- template definition -------------------------- */
  92.  
  93. #define USETAG(tag,check)     ((check) ? (tag) : TAG_IGNORE)
  94.  
  95. #define template    "FILES/M/A,XREFPRI/N/K,LOCK/S,UNLOCK/S,INDEX/S,NOINDEX/S"
  96.  
  97. enum {
  98.    ARG_FILES,
  99.    ARG_XREFPRI,
  100.    ARG_LOCK,
  101.    ARG_UNLOCK,
  102.    ARG_INDEX,
  103.    ARG_NOINDEX,
  104.    ARG_MAX};
  105.  
  106.  
  107. /* --------------------------- main entry point --------------------------- */
  108.  
  109. int main(int ac,char *av[])
  110. {
  111.    struct ExtRDArgs eargs = {NULL};
  112.    struct Library *XRefBase;
  113.  
  114.    ULONG para[ARG_MAX];
  115.    STRPTR obj = prgname;
  116.    LONG err;
  117.  
  118.    LONG i;
  119.  
  120.    /* clear args buffer */
  121.    for(i = 0 ; i < ARG_MAX ; i++)
  122.       para[i] = 0;
  123.  
  124.    eargs.erda_Template      = template;
  125.    eargs.erda_Parameter     = para;
  126.    eargs.erda_FileParameter = ARG_FILES;
  127.  
  128.    if((err = ExtReadArgs(ac,av,&eargs)) == 0)
  129.    {
  130.       obj = "xref.library";
  131.       if(XRefBase = OpenLibrary(obj,0))
  132.       {
  133.          struct Buffer *buf;
  134.  
  135.          if((buf = AllocMem(sizeof(struct Buffer),MEMF_ANY)))
  136.          {
  137.             STRPTR *files = (STRPTR *) para[ARG_FILES];
  138.             struct XRefFileNode *xreffile;
  139.  
  140.             LONG index = -1;
  141.             LONG lock  = -1;
  142.  
  143.             buf->b_Ptr = buf->b_Buffer;
  144.  
  145.             obj = prgname;
  146.  
  147.             if(para[ARG_LOCK])
  148.                lock = XREF_LOCK;
  149.             else if(para[ARG_UNLOCK])
  150.                lock = XREF_UNLOCK;
  151.  
  152.             if(para[ARG_INDEX])
  153.                index = TRUE;
  154.             else if(para[ARG_NOINDEX])
  155.                index = FALSE;
  156.  
  157.             while(*files)
  158.             {
  159.                if(!(xreffile = FindXRefFile(*files)))
  160.                   mysprintf(buf,"Couldn't find %s !\n",*files);
  161.                else
  162.                {
  163.                   SetXRefFileAttrs(xreffile,USETAG(XREFA_Index,(index != -1))        , index,
  164.                                             USETAG(XREFA_Lock,(lock!=-1))            , lock,
  165.                                             USETAG(XREFA_Priority,para[ARG_XREFPRI]) , (para[ARG_XREFPRI]) ? (*((LONG *) para[ARG_XREFPRI])) : 0,
  166.                                             TAG_DONE);
  167.                   {
  168.                      BOOL index,lock;
  169.                      BYTE pri;
  170.  
  171.                      if(GetXRefFileAttrs(xreffile,XREFA_Index    ,&index,
  172.                                                   XREFA_Lock     ,&lock,
  173.                                                   XREFA_Priority ,&pri,
  174.                                                   TAG_DONE) == 3)
  175.                      {
  176.                         mysprintf(buf,"%s : Priority = %ld , Index = %s , Lock = %s\n",
  177.                                       *files,pri,(index) ? "Yes" : "No",(lock) ? "Yes" : "No");
  178.                      }
  179.                   }
  180.                
  181.                }
  182.  
  183.                files++;
  184.             }
  185.  
  186.             if(ac == 0)
  187.             {
  188.                struct EasyStruct es = {
  189.                   sizeof(struct EasyStruct),
  190.                   0,
  191.                   NULL,
  192.                   NULL,
  193.                   "Ok"};
  194.  
  195.                es.es_TextFormat = buf->b_Buffer;
  196.                es.es_Title      = prgname;
  197.  
  198.                EasyRequestArgs(NULL,&es,NULL,NULL);
  199.             } else
  200.                PutStr(buf->b_Buffer);
  201.  
  202.             FreeMem(buf,sizeof(struct Buffer));
  203.          }
  204.          CloseLibrary(XRefBase);
  205.       }
  206.    }
  207.    ExtFreeArgs(&eargs);
  208.  
  209.    if(!err)
  210.       err = IoErr();
  211.  
  212.    if(err)
  213.    {
  214.       if(ac == 0)
  215.          showerror(prgname,obj,err);
  216.       else
  217.          PrintFault(err,obj);
  218.       return(RETURN_ERROR);
  219.    }
  220.  
  221.    return(RETURN_OK);
  222. }
  223.  
  224.  
  225.